package com.governtalk.backend.util;

import com.governtalk.backend.entity.User;
import com.governtalk.backend.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Component;

import java.util.Optional;

/**
 * 密码更新工具类
 * 用于生成BCrypt加密密码并更新用户密码
 */
@Component
public class PasswordUpdateUtil {
    
    @Autowired
    private UserRepository userRepository;
    
    private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
    
    /**
     * 生成BCrypt加密密码
     * @param rawPassword 原始密码
     * @return 加密后的密码
     */
    public String generateBCryptPassword(String rawPassword) {
        return passwordEncoder.encode(rawPassword);
    }
    
    /**
     * 更新admin用户的密码
     * @param newPassword 新密码（原始密码）
     * @return 更新结果信息
     */
    public String updateAdminPassword(String newPassword) {
        try {
            // 查找admin用户
            Optional<User> adminUserOpt = userRepository.findByUsername("admin");
            
            if (!adminUserOpt.isPresent()) {
                return "错误：未找到admin用户";
            }
            
            User adminUser = adminUserOpt.get();
            
            // 生成加密密码
            String encryptedPassword = generateBCryptPassword(newPassword);
            
            // 更新密码
            adminUser.setPassword(encryptedPassword);
            userRepository.save(adminUser);
            
            return String.format("成功更新admin用户密码！\n" +
                    "原始密码: %s\n" +
                    "加密密码: %s", newPassword, encryptedPassword);
                    
        } catch (Exception e) {
            return "更新密码时发生错误: " + e.getMessage();
        }
    }
    
    /**
     * 验证密码是否正确
     * @param rawPassword 原始密码
     * @param encodedPassword 加密密码
     * @return 验证结果
     */
    public boolean verifyPassword(String rawPassword, String encodedPassword) {
        return passwordEncoder.matches(rawPassword, encodedPassword);
    }
}
